package com.example.serviceorder.interceptor;

import feign.InvocationContext;
import feign.ResponseInterceptor;

/**
 * 自定义 Feign 响应拦截器
 * 用于拦截 OpenFeign 请求的响应，支持日志记录、异常处理等。
 */
public class OrderResponseInterceptor implements ResponseInterceptor {

    /**
     * 核心响应拦截方法。
     * 可用于统一处理返回数据、日志记录等
     *
     * @param invocationContext 当前请求上下文信息（包含请求、返回类型等）
     * @param chain 拦截器链，用于执行后续拦截器
     * @return 处理后的响应对象
     * @throws Exception 处理异常
     */
    @Override
    public Object intercept(InvocationContext invocationContext, Chain chain) throws Exception {
        System.out.println("执行了响应拦截器");
        return chain.next(invocationContext); // 执行后续处理
    }

    /**
     * 组合多个拦截器
     *
     * @param nextInterceptor 下一个拦截器
     * @return 组合后的拦截器
     */
    @Override
    public ResponseInterceptor andThen(ResponseInterceptor nextInterceptor) {
        return ResponseInterceptor.super.andThen(nextInterceptor);
    }

    /**
     * 应用拦截器链
     *
     * @param chain 拦截器链
     * @return 处理后的拦截器链
     */
    @Override
    public Chain apply(Chain chain) {
        System.out.println("apply执行成功！");
        System.out.println(chain);
        return ResponseInterceptor.super.apply(chain);
    }
}
